package com.tjjingpan.learnkotlin.base


//带有两个Int参数、返回Int的函数
fun sum (a:Int,b:Int):Int{
    return a + b
}

//函数体可以是表达式，其返回类型可以推断出来
fun sum1(a:Int,b:Int) = a + b

//返回无意义的函数
fun printSum(a:Int,b:Int):Unit{
    println("sum of $a and $b is ${a + b}")
}
//Unit返回类型可以省略
fun printSum1(a:Int,b:Int){
    println("sum of $a and $b is ${a + b}")
}

//可变数量的参数(varargs)
fun <T> asList(vararg ts:T):List<T>{
    val result = ArrayList<T>()
    for(t in ts) //ts is an Array
        result.add(t)
    return result
}

//中缀表示法
infix fun Int.mulitiply(x:Int):Int{
    return this * x
}



fun main(){
    print("sum of 3 and 5 is ")
    println(sum1(3,5))
    printSum1(-1,8)

    //将可变数量的参数传递给函数
    val list = asList(1,2,3)
    val a = arrayOf(1,2,3)
    //如果已经有一个数组并希望将其内容传给该函数，
    // 那么使用伸展操作符（在数组前面加*）
    val list1 = asList(-1,0,*a,4)

    val a1 = intArrayOf(1,2,3)//IntArray 是一个原始类型数组
    val list2 = asList(-1,0,*a1.toTypedArray(),4)

    println(1 mulitiply 2)    //用中缀表示法调用Int.sh1函数
    println(1.mulitiply(2))//等同于1.sh1(x)


}

